package org.example.exception;

import lombok.extern.slf4j.Slf4j;
import org.example.util.JsonData;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @description: 异常处理器
 * @author: 谢超
 * @date: 2023/07/16 9:58
 **/
//@ControllerAdvice
@RestControllerAdvice
@Slf4j
public class CustomExceptionHandler {
    /**
     * @ExceptionHandler: 是Spring异常处理器，使用时需要自定义处理异常的方法
     * @ExceptionHandler(参数) 通过参数 value=xx.class 指定处理某个异常类的class，代表这个方法专门处理该类异常
     * @param e
     * @return 返回异常处理的结果，通过@RestControllerAdvice作为响应体返回
     */
    @ExceptionHandler(value = Exception.class)
    public JsonData handler(Exception e) {
        // 判断当前传入的e，是否为我们设定的业务异常类
        // 如果是则将其类型，强转为业务异常类并将JsonData作为返回体
        if (e instanceof BizException) {
            BizException bizException = (BizException) e;
            log.error("[业务异常]{}",e);
            return  JsonData.buildCodeAndMsg(bizException.getCode(), bizException.getMessage());
        } else {
            log.error("[系统异常]{}",e);
            return JsonData.buildError("系统异常");
        }
    }
}
